package Bridge;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

public class XMLUtilPen {
    // 该方法用于从 XML 配置文件中提取类的名称，并返回所需类的对象
    public static Object getBean(String beanId) {
        try {
            // 创建文档构建器工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // 创建文档构建器
            DocumentBuilder builder = factory.newDocumentBuilder();
            // 加载 XML 文档到内存中，并得到 document 实例
            InputStream inputStream = XMLUtilPen.class.getClassLoader().getResourceAsStream("configPen.xml");
            if (inputStream == null) {
                throw new RuntimeException("找不到配置文件 config.xml");
            }
            Document doc = builder.parse(inputStream);

            // 获取所有bean节点列表
            NodeList nl = doc.getElementsByTagName("bean");
            for (int i = 0; i < nl.getLength(); i++) {
                Node item = nl.item(i);
                if (item.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) item;
                    // 检查bean的id属性是否匹配传入的beanId
                    if (element.getAttribute("id").equals(beanId)) {
                        String className = element.getAttribute("class");
                        // 使用反射机制动态创建实例
                        Class<?> c = Class.forName(className);
                        return c.getDeclaredConstructor().newInstance();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}